Pipenv را برای مدیریت وابستگی پروژه های پایتون مسلط شوید و گردش کار توسعه خود را با محیط های مجازی ساده کنید. بهترین شیوه ها و تکنیک های پیشرفته را بیاموزید.
محیط مجازی Pipenv: راهنمای گردش کار بهینه سازی شده توسعه
در دنیای توسعه پایتون، مدیریت کارآمد وابستگیهای پروژه برای حفظ سازگاری، قابلیت بازتولید و جلوگیری از تعارضات بسیار مهم است. Pipenv به عنوان یک ابزار قدرتمند و کاربرپسند ظاهر شده است که این فرآیند را با ترکیب مدیریت بسته (مانند `pip`) با مدیریت محیط مجازی (مانند `virtualenv`) ساده میکند. این راهنمای جامع شما را در هر آنچه که باید در مورد Pipenv بدانید، از تنظیمات اولیه تا استفاده پیشرفته، راهنمایی میکند تا گردش کار توسعه خود را بهینه کنید و اطمینان حاصل کنید که پروژههای شما به خوبی سازماندهی شده و قابل حمل هستند.
چرا از Pipenv استفاده کنیم؟
قبل از پرداختن به جزئیات، بیایید درک کنیم که چرا Pipenv یک انتخاب برتر برای مدیریت پروژههای پایتون شما است. روشهای سنتی اغلب شامل استفاده جداگانه از `pip` و `virtualenv` است که میتواند منجر به ناهماهنگیها و سربار مدیریتی شود. Pipenv با:
- ترکیب مدیریت بسته و محیطهای مجازی: Pipenv هر دو عملکرد را به طور یکپارچه ادغام میکند و مدیریت وابستگی را آسان میکند.
- ساختهای قطعی: Pipenv از `Pipfile` و `Pipfile.lock` برای اطمینان از ساختهای قابل تکرار در محیطهای مختلف استفاده میکند. `Pipfile` وابستگیهای مستقیم پروژه شما را فهرست میکند، در حالی که `Pipfile.lock` نسخههای دقیق همه وابستگیها (از جمله وابستگیهای انتقالی) را ثبت میکند و تضمین میکند که همه افراد در حال کار بر روی پروژه از بستههای یکسانی استفاده میکنند.
- گردش کار ساده شده: Pipenv یک رابط خط فرمان تمیز و شهودی ارائه میدهد و انجام کارهای رایج مانند نصب، حذف نصب و مدیریت وابستگیها را آسان میکند.
- امنیت پیشرفته: فایل `Pipfile.lock` تضمین میکند که از همان نسخههای بسته استفاده میکنید که هنگام تنظیم اولیه پروژه استفاده میشد، و خطر آسیبپذیریهای امنیتی مرتبط با نسخههای جدیدتر و آزمایش نشده را کاهش میدهد.
- پشتیبانی از `pyproject.toml`: Pipenv استاندارد مدرن `pyproject.toml` را برای پیکربندی پروژه میپذیرد و آن را با سایر ابزارهای ساخت و گردش کار سازگار میکند.
نصب و راه اندازی
قبل از اینکه بتوانید استفاده از Pipenv را شروع کنید، باید آن را نصب کنید. در اینجا نحوه نصب Pipenv با استفاده از `pip` آمده است:
pip install pipenv
به طور کلی توصیه می شود Pipenv را در یک محیط ایزوله نصب کنید تا از تعارض با سایر بسته های پایتون جلوگیری شود. می توانید از `pipx` برای این کار استفاده کنید:
pip install pipx
pipx ensurepath
pipx install pipenv
پس از نصب، بررسی کنید که Pipenv به درستی نصب شده باشد با بررسی نسخه آن:
pipenv --version
این دستور باید نسخه Pipenv نصب شده را نشان دهد.
استفاده اولیه: ایجاد و مدیریت محیط های مجازی
ایجاد یک پروژه جدید
برای ایجاد یک پروژه جدید با Pipenv، در ترمینال به دایرکتوری پروژه خود بروید و اجرا کنید:
pipenv install
این دستور یک محیط مجازی جدید برای پروژه شما ایجاد می کند و یک `Pipfile` و `Pipfile.lock` ایجاد می کند اگر از قبل وجود نداشته باشند. محیط مجازی معمولاً در یک دایرکتوری پنهان `.venv` در داخل پروژه شما یا در یک مکان متمرکز که توسط Pipenv مدیریت می شود، ذخیره می شود.
فعال کردن محیط مجازی
برای فعال کردن محیط مجازی، از دستور زیر استفاده کنید:
pipenv shell
این دستور یک پوسته جدید با محیط مجازی فعال شده باز می کند. معمولاً نام محیط مجازی را در پرانتز قبل از خط فرمان مشاهده خواهید کرد که نشان می دهد محیط فعال است.
نصب بسته ها
برای نصب بستهها در محیط مجازی خود، از دستور `pipenv install` به همراه نام بستهها استفاده کنید:
pipenv install requests
pipenv install flask
این دستورات بسته های `requests` و `flask` را نصب می کنند و آنها را به `Pipfile` شما اضافه می کنند. Pipenv به طور خودکار `Pipfile.lock` را برای ثبت نسخه های دقیق بسته های نصب شده و وابستگی های آنها به روز می کند.
همچنین می توانید هنگام نصب بسته ها، محدودیت های نسخه را مشخص کنید:
pipenv install requests==2.26.0
این دستور نسخه 2.26.0 بسته `requests` را نصب می کند.
نصب وابستگی های توسعه
اغلب، بستههایی خواهید داشت که فقط در طول توسعه مورد نیاز هستند، مانند فریم ورک های تست یا linters. می توانید اینها را به عنوان وابستگی های توسعه با استفاده از پرچم `--dev` نصب کنید:
pipenv install pytest --dev
pipenv install flake8 --dev
این بسته ها به `Pipfile` در بخش `[dev-packages]` اضافه می شوند.
حذف نصب بسته ها
برای حذف نصب یک بسته، از دستور `pipenv uninstall` استفاده کنید:
pipenv uninstall requests
این دستور بسته `requests` را از محیط مجازی حذف می کند و `Pipfile` و `Pipfile.lock` را به روز می کند.
فهرست کردن بسته های نصب شده
برای مشاهده لیستی از بسته های نصب شده در محیط مجازی خود، از دستور `pipenv graph` استفاده کنید:
pipenv graph
این دستور یک نمودار وابستگی را نشان می دهد که بسته های نصب شده و وابستگی های آنها را نشان می دهد.
اجرای دستورات در محیط مجازی
می توانید دستورات را در محیط مجازی بدون فعال کردن آن با استفاده از `pipenv run` اجرا کنید:
pipenv run python your_script.py
این دستور اسکریپت `your_script.py` را با استفاده از مفسر پایتون در محیط مجازی اجرا می کند.
استفاده پیشرفته و بهترین شیوه ها
کار با `Pipfile` و `Pipfile.lock`
`Pipfile` و `Pipfile.lock` فایل های اصلی برای مدیریت وابستگی ها در Pipenv هستند. `Pipfile` وابستگیهای مستقیم پروژه شما را فهرست میکند، در حالی که `Pipfile.lock` نسخههای دقیق همه وابستگیها (از جمله موارد انتقالی) را ثبت میکند. درک نحوه کار این فایلها و نحوه مدیریت مؤثر آنها بسیار مهم است.
ساختار `Pipfile`:
`Pipfile` یک فایل TOML است که حاوی اطلاعاتی در مورد وابستگی های پروژه، نسخه پایتون و سایر تنظیمات است. در اینجا یک مثال اساسی آورده شده است:
[requires]
python_version = "3.9"
[packages]
requests = "*"
flask = "*"
[dev-packages]
pytest = "*"
[source]
name = "pypi"
url = "https://pypi.org/simple"
verify_ssl = true
- `[requires]`: نسخه پایتون مورد نیاز برای پروژه را مشخص می کند.
- `[packages]`: وابستگی های مستقیم پروژه را فهرست می کند. `"*"` نشان می دهد که هر نسخه ای قابل قبول است، اما توصیه می شود محدودیت های نسخه را مشخص کنید.
- `[dev-packages]`: وابستگی های توسعه را فهرست می کند.
- `[source]`: فهرست بسته مورد استفاده را مشخص می کند.
ساختار `Pipfile.lock`:
`Pipfile.lock` یک فایل JSON است که حاوی نسخه های دقیق همه بسته ها و وابستگی های آنها است. این فایل به طور خودکار توسط Pipenv ایجاد و به روز می شود. شما هرگز نباید این فایل را به صورت دستی ویرایش کنید.
به روز رسانی وابستگی ها:
برای به روز رسانی وابستگی های خود، از دستور `pipenv update` استفاده کنید. این دستور تمام بسته ها را به آخرین نسخه هایی که محدودیت های نسخه را در `Pipfile` شما برآورده می کنند به روز می کند و `Pipfile.lock` را بر این اساس به روز می کند:
pipenv update
برای به روز رسانی یک بسته خاص، از دستور `pipenv update` به همراه نام بسته استفاده کنید:
pipenv update requests
استفاده از نسخه های مختلف پایتون
Pipenv به شما امکان می دهد نسخه پایتون را برای پروژه خود مشخص کنید. می توانید این کار را هنگام ایجاد محیط مجازی انجام دهید:
pipenv --python 3.9
این دستور یک محیط مجازی با استفاده از پایتون 3.9 ایجاد می کند. Pipenv به طور خودکار نسخه های پایتون موجود در سیستم شما را تشخیص می دهد. همچنین می توانید نسخه پایتون را در `Pipfile` مشخص کنید:
[requires]
python_version = "3.9"
کار با چندین محیط
در بسیاری از پروژهها، محیطهای مختلفی مانند توسعه، آزمایش و تولید خواهید داشت. می توانید این محیط ها را با استفاده از متغیرهای محیطی مدیریت کنید.
به عنوان مثال، می توانید متغیر محیطی `PIPENV_DEV` را روی `1` تنظیم کنید تا وابستگی های توسعه را نصب کنید:
PIPENV_DEV=1 pipenv install
همچنین می توانید از `Pipfile` های مختلف برای محیط های مختلف استفاده کنید. به عنوان مثال، می توانید یک `Pipfile.dev` برای وابستگی های توسعه و یک `Pipfile.prod` برای وابستگی های تولید داشته باشید. سپس می توانید از متغیر محیطی `PIPENV_PIPFILE` برای مشخص کردن اینکه کدام `Pipfile` استفاده شود، استفاده کنید:
PIPENV_PIPFILE=Pipfile.dev pipenv install
ادغام با IDE ها و ویرایشگرها
بیشتر IDE ها و ویرایشگرهای محبوب، مانند VS Code، PyCharm و Sublime Text، از پشتیبانی داخلی برای Pipenv برخوردار هستند. این ادغام مدیریت محیط های مجازی و وابستگی های شما را مستقیماً از IDE خود آسان می کند.
VS Code:
VS Code به طور خودکار محیط های مجازی Pipenv را تشخیص می دهد. می توانید محیط مجازی مورد استفاده را از گوشه پایین سمت راست پنجره VS Code انتخاب کنید. همچنین می توانید VS Code را برای استفاده از Pipenv با تنظیم `python.pythonPath` در فایل `settings.json` خود پیکربندی کنید:
"python.pythonPath": "${workspaceFolder}/.venv/bin/python"
PyCharm:
PyCharm نیز به طور خودکار محیط های مجازی Pipenv را تشخیص می دهد. می توانید محیط مجازی مورد استفاده را از تنظیمات Project Interpreter انتخاب کنید. PyCharm همچنین ویژگی هایی را برای مدیریت وابستگی های Pipenv و اجرای دستورات در محیط مجازی ارائه می دهد.
ملاحظات امنیتی
هنگام استفاده از Pipenv، مهم است که از ملاحظات امنیتی آگاه باشید:
- تأیید هش های بسته: Pipenv به طور خودکار هش های بسته های دانلود شده را تأیید می کند تا اطمینان حاصل شود که دستکاری نشده اند.
- به روز نگه داشتن وابستگی ها: به طور مرتب وابستگی های خود را به آخرین نسخه ها به روز کنید تا آسیب پذیری های امنیتی را وصله کنید.
- استفاده از محیط مجازی: همیشه از یک محیط مجازی برای جدا کردن وابستگی های پروژه خود و جلوگیری از تعارض با سایر پروژه ها استفاده کنید.
- بررسی `Pipfile.lock`: به طور دوره ای فایل `Pipfile.lock` را بررسی کنید تا مطمئن شوید که بسته ها و وابستگی های آنها همان چیزی هستند که انتظار دارید.
مشکلات رایج و عیب یابی
تعارضات `Pipfile.lock`
تعارضات `Pipfile.lock` زمانی رخ می دهد که چندین توسعه دهنده روی یک پروژه کار می کنند و نسخه های مختلفی از وابستگی ها دارند. برای حل این تعارضات، مراحل زیر را دنبال کنید:
- اطمینان حاصل کنید که همه از یک نسخه پایتون استفاده می کنند.
- وابستگی های محلی خود را با استفاده از `pipenv update` به روز کنید.
- `Pipfile.lock` به روز شده را در مخزن commit کنید.
- از سایر توسعه دهندگان بخواهید آخرین تغییرات را pull کنند و `pipenv install` را برای همگام سازی محیط های خود اجرا کنند.
شکست نصب بسته
شکست نصب بسته می تواند به دلایل مختلفی رخ دهد، مانند مشکلات شبکه، وابستگی های ناسازگار یا کتابخانه های سیستم گمشده. برای عیب یابی این مسائل:
- اتصال اینترنت خود را بررسی کنید.
- اطمینان حاصل کنید که کتابخانه های سیستم مورد نیاز را نصب کرده اید.
- سعی کنید بسته را با یک محدودیت نسخه خاص نصب کنید.
- برای راهنمایی به مستندات بسته یا انجمن های انجمن مراجعه کنید.
مشکلات فعال سازی محیط مجازی
اگر در فعال کردن محیط مجازی مشکل دارید، این مراحل را امتحان کنید:
- مطمئن شوید که در دایرکتوری پروژه هستید.
- دوباره `pipenv shell` را اجرا کنید.
- اگر از یک پوسته سفارشی استفاده می کنید، مطمئن شوید که برای فعال کردن محیط های مجازی پیکربندی شده است.
مثال ها و موارد استفاده دنیای واقعی
توسعه وب با Flask یا Django
Pipenv به ویژه برای پروژه های توسعه وب با استفاده از فریم ورک هایی مانند Flask یا Django مفید است. این فرآیند مدیریت وابستگی ها مانند خود فریم ورک وب، اتصال دهنده های پایگاه داده و سایر کتابخانه های ضروری را ساده می کند. به عنوان مثال، یک پروژه Django ممکن است وابستگی هایی مانند `django`، `psycopg2` (برای PostgreSQL) و `djangorestframework` داشته باشد. Pipenv تضمین می کند که همه توسعه دهندگان از نسخه های یکسانی از این بسته ها استفاده می کنند و از مشکلات سازگاری جلوگیری می کند.
پروژه های علم داده
پروژه های علم داده اغلب به تعداد زیادی از کتابخانه ها مانند `numpy`، `pandas`، `scikit-learn` و `matplotlib` متکی هستند. Pipenv به مدیریت این وابستگی ها کمک می کند و اطمینان می دهد که محیط علم داده در ماشین ها و استقرارهای مختلف سازگار است. با استفاده از Pipenv، دانشمندان داده می توانند به راحتی پروژه های خود را با همکاران به اشتراک بگذارند یا آنها را بدون نگرانی در مورد تعارضات وابستگی در تولید مستقر کنند.
اسکریپت های اتوماسیون و ابزارهای خط فرمان
حتی برای اسکریپت های اتوماسیون کوچکتر یا ابزارهای خط فرمان، Pipenv مزایای قابل توجهی را ارائه می دهد. این به شما امکان می دهد وابستگی های مورد نیاز برای اسکریپت را جدا کنید و از تداخل آنها با سایر نصب های پایتون در سیستم خود جلوگیری کنید. این امر به ویژه در صورتی مفید است که چندین اسکریپت داشته باشید که به نسخه های مختلف یک بسته نیاز دارند.
مثال: یک وب اسکریپر ساده
تصور کنید می خواهید اسکریپتی ایجاد کنید که داده ها را از یک وب سایت خراش دهد. احتمالاً به کتابخانه `requests` برای واکشی محتوای HTML و `beautifulsoup4` برای تجزیه آن نیاز خواهید داشت. با استفاده از Pipenv، می توانید به راحتی این وابستگی ها را مدیریت کنید:
pipenv install requests beautifulsoup4
این اطمینان می دهد که اسکریپت همیشه از نسخه های صحیح این کتابخانه ها صرف نظر از سیستمی که روی آن اجرا می شود، استفاده می کند.
جایگزین های Pipenv
در حالی که Pipenv یک ابزار عالی است، گزینه های دیگری برای مدیریت وابستگی ها و محیط های مجازی پایتون وجود دارد:
- `venv` (ساخته شده): ماژول `venv` کتابخانه استاندارد، قابلیت های اساسی محیط مجازی را ارائه می دهد. این شامل ویژگی های مدیریت بسته نیست، بنابراین شما همچنان باید از `pip` جداگانه استفاده کنید.
- `virtualenv`: یک کتابخانه شخص ثالث محبوب برای ایجاد محیط های مجازی. مانند `venv`، به `pip` برای مدیریت بسته نیاز دارد.
- `poetry`: یکی دیگر از ابزارهای مدرن مدیریت وابستگی که مدیریت بسته و مدیریت محیط مجازی را ترکیب می کند، شبیه به Pipenv. Poetry همچنین از فایل `pyproject.toml` برای پیکربندی پروژه استفاده می کند.
- `conda`: یک سیستم مدیریت بسته، وابستگی و محیط برای هر زبانی - پایتون، R، جاوا اسکریپت، C، C++، جاوا و غیره. Conda متن باز است و توسط Anaconda, Inc نگهداری می شود.
هر یک از این ابزارها نقاط قوت و ضعف خاص خود را دارند. Pipenv یک انتخاب خوب برای پروژه هایی است که به یک گردش کار ساده و شهودی نیاز دارند، در حالی که Poetry ممکن است برای پروژه هایی که به ویژگی های پیشرفته تر یا ادغام با سایر ابزارهای ساخت نیاز دارند، ترجیح داده شود. `conda` هنگام مدیریت محیط ها برای پروژه های زبان ترکیبی برتری دارد. `venv` و `virtualenv` برای جداسازی محیط اولیه مفید هستند، اما فاقد ویژگی های مدیریت وابستگی Pipenv و Poetry هستند.
نتیجه
Pipenv یک ابزار ارزشمند برای بهینه سازی گردش کار توسعه پایتون شما با ساده سازی مدیریت وابستگی و اطمینان از ساخت های قابل تکرار است. با درک مفاهیم اصلی و بهترین شیوه ها، می توانید پروژه های پایتون سازمان یافته، قابل حمل و ایمن ایجاد کنید. چه روی یک اسکریپت کوچک یا یک برنامه کاربردی در مقیاس بزرگ کار می کنید، Pipenv می تواند به شما کمک کند وابستگی های خود را کارآمدتر مدیریت کنید و روی نوشتن کد تمرکز کنید.
از تنظیمات اولیه تا پیکربندیهای پیشرفته، تسلط بر Pipenv بهرهوری شما را بهبود میبخشد و محیطهای سازگار را در پلتفرمها و اعضای تیم مختلف تضمین میکند. Pipenv را در آغوش بگیرید و تجربه توسعه پایتون خود را ارتقا دهید.